En esta práctica vamos a utilizar el método de mínimos cuadrados, para interpolar un conjunto de datos, en una función lineal, a continuación declaramos un conjunto de datos en arreglos de numpy
, para facilitarnos su manejo:
In [ ]:
from numpy import array, linspace
In [ ]:
xs = array([0, 2, 3, 6, 7])
ys = array([0.120, 0.153, 0.170, 0.225, 0.260])
Ahora, tan solo tenemos que obtener información de estos datos,
In [ ]:
m = len(xs)
Σx = sum(xs)
Σy = sum(ys)
Σx2 = sum(xs.T*xs)
Σxy = sum(xs.T*ys)
Σx, Σy, Σx2, Σxy
Una vez que tenemos todos estos valores, tan solo utilizamos las ecuaciones derivadas por el método de Cramer, para obtener el valor de $a_0$ y $a_1$:
In [ ]:
a0 = (Σy*Σx2 - Σx*Σxy)/(m*Σx2 - Σx**2)
a1 = (m*Σxy - Σy*Σx)/(m*Σx2 - Σx**2)
y obtener la función de la interpolación:
In [ ]:
f = lambda x: a0 + a1*x
De la misma manera que en la práctica anterior, podemos obtener un espacio lineal y gráficarlo en conjunto con los datos originales como puntos:
In [ ]:
x = linspace(min(xs), max(xs), 100)
y = f(x)
In [ ]:
from matplotlib.pyplot import plot, figure
%matplotlib inline
In [ ]:
plot(xs, ys, "o")
plot(x, y)
Note que los datos no estan realmente en la gráfica de la interpolación, estamos interpolando una función lineal, en un conjunto de datos que no pueden ser unidos por una sola recta; sin embargo, tenemos garantizado que el error general de esta interpolación es el mínimo.
In [ ]:
import json
datos = None
with open('datos.json') as archivo:
datos = json.load(archivo)
año, flujo = datos[0], datos[1]